package controlador;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Evento;
import modelo.servicio.Eventos;

public class EventoControlador extends HttpServlet {

    private String accion;
    private String usuario;
    private StringBuilder html;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        html    = new StringBuilder("");
        accion  = request.getParameter("ac") != null
                ? request.getParameter("ac") : "";
        usuario = request.getSession().getAttribute("sUsuario") != null
                ? request.getSession().getAttribute("sUsuario").toString() : "";
        try {
            if (accion.compareToIgnoreCase("ls") == 0) {
            } else if (accion.compareToIgnoreCase("sv") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String clavePaso = request.getParameter("clvp");
                String claveEvento = request.getParameter("txt_clave");
                String tipoCausa = request.getParameter("rdb_tipo_causa");
                String clavePasoSig = request.getParameter("cmb_paso1");
                String descripcion = request.getParameter("txt_descripcion");
                String tipoAprobacion = request.getParameter("rdb_tipo_apro");
                String descripcionCorta = request.getParameter("txt_desc_corta") != null
                        ? request.getParameter("txt_desc_corta") : "";
                String clavePasoSigMonto = request.getParameter("cmb_paso2") != null
                        ? request.getParameter("cmb_paso2") : "";
                long aprobadores = Long.parseLong(request.getParameter("txt_aprobadores") != null
                        ? request.getParameter("txt_aprobadores") : "0");
                String cuasable = request.getParameter("ckb_causable") != null
                                ? request.getParameter("ckb_causable") : "";
                String forzosos = request.getParameter("ckb_forzosos") != null
                                ? request.getParameter("ckb_forzosos") : "";
                Eventos.instancia().agregar(claveFlujo, clavePaso, claveEvento,
                        descripcion, descripcionCorta, tipoAprobacion, aprobadores,
                        forzosos.equalsIgnoreCase("ON"), cuasable.equalsIgnoreCase("ON"),
                        tipoCausa, clavePasoSig, clavePasoSigMonto, usuario);
                html.append("<script type='text/javascript'>")
                        .append("charge('#ui-tabs-4', 'front?v=4&ac=1&clvf=")
                        .append(claveFlujo.replace("'", "\\'")).append("&clvp=")
                        .append(clavePaso.replace("'", "\\'")).append("');")
                        .append("</script>");
            } else if (accion.compareToIgnoreCase("ed") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String clavePaso = request.getParameter("clvp");
                String claveEvento = request.getParameter("txt_clave");
                String descripcion = request.getParameter("txt_descripcion");
                String descripcionCorta = request.getParameter("txt_desc_corta") == null ? "" : request.getParameter("txt_desc_corta");
                String tipoCausa = request.getParameter("rdb_tipo_causa");
                String clavePasoSig = request.getParameter("cmb_paso1");
                String clavePasoSigMonto = request.getParameter("cmb_paso2") != null
                        ? request.getParameter("cmb_paso2") : "";
                String tipoAprobacion = request.getParameter("rdb_tipo_apro");
                int aprobadores = Integer.parseInt(request.getParameter("txt_aprobadores") != null
                        ? request.getParameter("txt_aprobadores") : "0");
                String cuasable = request.getParameter("ckb_causable") != null
                                ? request.getParameter("ckb_causable") : "";
                String forzosos = request.getParameter("ckb_forzosos") != null
                                ? request.getParameter("ckb_forzosos") : "";
                Eventos.instancia().editar(claveFlujo, clavePaso, claveEvento,
                        descripcion, descripcionCorta, tipoAprobacion, aprobadores,
                        forzosos.equalsIgnoreCase("ON"), cuasable.equalsIgnoreCase("ON"),
                        tipoCausa, clavePasoSig, clavePasoSigMonto, usuario);
                html.append("<script type='text/javascript'>")
                        .append("charge('#ui-tabs-4', 'front?v=4&ac=1&clvf=")
                        .append(claveFlujo.replace("'", "\\'")).append("&clvp=")
                        .append(clavePaso.replace("'", "\\'")).append("');")
                        .append("</script>");
            } else if (accion.compareToIgnoreCase("el") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String clavePaso = request.getParameter("clvp");
                String clave = request.getParameter("clve");
                Eventos.instancia().eliminar(claveFlujo, clavePaso, clave);
                html.append("<script type='text/javascript'>")
                        .append("charge('#ui-tabs-4', 'front?v=4&ac=1&clvf=")
                        .append(claveFlujo.replace("'", "\\'")).append("&clvp=")
                        .append(clavePaso.replace("'", "\\'")).append("');")
                        .append("</script>");
            } else if (accion.compareToIgnoreCase("op") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String clavePaso = request.getParameter("clvp");
                String clave = request.getParameter("clve");
                Eventos.instancia().eliminar(claveFlujo, clavePaso, clave);
                html.append("<script type='text/javascript'>")
                        .append("charge('#ui-tabs-4', 'front?v=4&ac=1&clvf=")
                        .append(claveFlujo.replace("'", "\\'")).append("&clvp=")
                        .append(clavePaso.replace("'", "\\'")).append("');")
                        .append("</script>");
            } else if (accion.compareToIgnoreCase("sc") == 0) {
                String claveFlujo = request.getParameter("clvf");
                String clavePaso = request.getParameter("clvp");
                String clave = request.getParameter("clve");
                Evento evento = Eventos.instancia().porClave(claveFlujo, clavePaso, clave);
                if (evento != null && evento.isCausable()) {
                    String url = "/caus?ac=op&tipo=" + evento.getTipoCausa();
                    getServletContext().getRequestDispatcher(url).forward(request, response);
                }
            }
            out.println(html);
        } catch (DAOException dex) {
            out.println("Error en la base de datos: " + dex.getMessage());
        } finally {
            out.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}
